home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -seriously_amiga- / programming / other / cyberxxxsrc / misc / asynciosupport2.mod < prev    next >
Text File  |  1999-02-08  |  6KB  |  197 lines

  1. MODULE  AsyncIOSupport2;
  2.  
  3. (* $StackChk- $OvflChk- $RangeChk- $CaseChk- $ReturnChk- $NilChk- $TypeChk- $OddChk- $ClearVars- *)
  4.  
  5. (* /// ------------------------------- "IMPORT" -------------------------------- *)
  6. IMPORT  aio:=AsyncIO,
  7.         d:=Dos,
  8.         e:=Exec,
  9.         i2m:=Intel2Mot,
  10.         u:=Utility,
  11.         y:=SYSTEM;
  12. (* \\\ ------------------------------------------------------------------------- *)
  13.  
  14. (* /// -------------------------------- "TYPE" --------------------------------- *)
  15. TYPE    ASFilePtr * =UNTRACED POINTER TO ASFile;
  16.         ASFile * =STRUCT
  17.             handle: aio.AsyncFilePtr;
  18.             readOk - : BOOLEAN;
  19.             noOdd: BOOLEAN;
  20.         END;
  21. (* \\\ ------------------------------------------------------------------------- *)
  22.  
  23. (* /// -------------------------- "PROCEDURE Open()" --------------------------- *)
  24. PROCEDURE Open * (VAR file: ASFile;
  25.                   name: ARRAY OF CHAR;
  26.                   buffers: LONGINT;
  27.                   noOdd: BOOLEAN): BOOLEAN; (* $CopyArrays- *)
  28. BEGIN
  29.   IF file.handle#NIL THEN y.SETREG(0,aio.CloseAsync(file.handle)); END;
  30.   file.handle:=aio.OpenAsync(name,aio.read,buffers);
  31.   file.readOk:=(file.handle#NIL);
  32.   file.noOdd:=noOdd;
  33.   RETURN file.readOk;
  34. END Open;
  35. (* \\\ ------------------------------------------------------------------------- *)
  36.  
  37. (* /// -------------------------- "PROCEDURE Close()" -------------------------- *)
  38. PROCEDURE Close * (VAR file: ASFile);
  39. BEGIN
  40.   IF file.handle#NIL THEN
  41.     y.SETREG(0,aio.CloseAsync(file.handle));
  42.     file.handle:=NIL;
  43.   END;
  44. END Close;
  45. (* \\\ ------------------------------------------------------------------------- *)
  46.  
  47. (* /// -------------------------- "PROCEDURE Read()" --------------------------- *)
  48. PROCEDURE Read * (VAR file: ASFile;
  49.                   buffer: e.APTR;
  50.                   size: LONGINT);
  51. BEGIN
  52.   IF file.noOdd & ODD(size) THEN INC(size); END;
  53.   file.readOk:=(aio.ReadAsyncAPTR(file.handle,buffer,size)=size) & file.readOk;
  54. END Read;
  55. (* \\\ ------------------------------------------------------------------------- *)
  56.  
  57. (* /// -------------------------- "PROCEDURE Skip()" --------------------------- *)
  58. PROCEDURE Skip * (VAR file: ASFile;
  59.                   bytes: LONGINT);
  60. BEGIN
  61.   IF file.noOdd & ODD(bytes) THEN INC(bytes); END;
  62.   file.readOk:=(aio.SeekAsync(file.handle,bytes,aio.current)#-1) & file.readOk;
  63. END Skip;
  64. (* \\\ ------------------------------------------------------------------------- *)
  65.  
  66. (* /// ------------------------- "PROCEDURE SeekTo()" -------------------------- *)
  67. PROCEDURE SeekTo * (VAR file: ASFile;
  68.                     pos: LONGINT);
  69. BEGIN
  70.   file.readOk:=(aio.SeekAsync(file.handle,pos,aio.start)#-1) & file.readOk;
  71. END SeekTo;
  72. (* \\\ ------------------------------------------------------------------------- *)
  73.  
  74. (* /// ------------------------- "PROCEDURE FilePos()" ------------------------- *)
  75. PROCEDURE FilePos * (VAR file: ASFile): LONGINT;
  76.  
  77. VAR     pos: LONGINT;
  78.  
  79. BEGIN
  80.   pos:=aio.SeekAsync(file.handle,0,aio.current);
  81.   file.readOk:=(pos#-1) & file.readOk;
  82.   RETURN pos;
  83. END FilePos;
  84. (* \\\ ------------------------------------------------------------------------- *)
  85.  
  86. (* /// ------------------------ "PROCEDURE FileSize()" ------------------------- *)
  87. PROCEDURE FileSize * (VAR file: ASFile): LONGINT;
  88.  
  89. VAR     fib: d.FileInfoBlockPtr;
  90.         size: LONGINT;
  91.  
  92. BEGIN
  93.   fib:=d.AllocDosObjectTags(d.fib,u.done);
  94.   IF fib#NIL THEN
  95.     file.readOk:=d.ExamineFH(file.handle.file,fib^) & file.readOk;
  96.     size:=fib.size;
  97.     d.FreeDosObject(d.fib,fib);
  98.   ELSE
  99.     size:=0;
  100.   END;
  101.   RETURN size;
  102. END FileSize;
  103. (* \\\ ------------------------------------------------------------------------- *)
  104.  
  105. (* /// ----------------------- "PROCEDURE GetMSBLong()" ------------------------ *)
  106. PROCEDURE GetMSBLong * (VAR file: ASFile): LONGINT;
  107.  
  108. VAR     data: LONGINT;
  109.         ret: LONGINT;
  110.  
  111. BEGIN
  112.   ret:=0;
  113.   IF aio.ReadAsync(file.handle,data,SIZE(data))=SIZE(data) THEN
  114.     ret:=data;
  115.     file.readOk:=TRUE;
  116.   ELSE
  117.     file.readOk:=FALSE;
  118.   END;
  119.   RETURN ret;
  120. END GetMSBLong;
  121. (* \\\ ------------------------------------------------------------------------- *)
  122.  
  123. (* /// ----------------------- "PROCEDURE GetMSBShort()" ----------------------- *)
  124. PROCEDURE GetMSBShort * (VAR file: ASFile): INTEGER;
  125.  
  126. VAR     data: INTEGER;
  127.         ret: INTEGER;
  128.  
  129. BEGIN
  130.   ret:=0;
  131.   IF aio.ReadAsync(file.handle,data,SIZE(data))=SIZE(data) THEN
  132.     ret:=data;
  133.     file.readOk:=TRUE;
  134.   ELSE
  135.     file.readOk:=FALSE;
  136.   END;
  137.   RETURN ret;
  138. END GetMSBShort;
  139. (* \\\ ------------------------------------------------------------------------- *)
  140.  
  141. (* /// ----------------------- "PROCEDURE GetLSBLong()" ------------------------ *)
  142. PROCEDURE GetLSBLong * (VAR file: ASFile): LONGINT;
  143.  
  144. VAR     data: LONGINT;
  145.  
  146. BEGIN
  147.   IF aio.ReadAsync(file.handle,data,SIZE(data))=SIZE(data) THEN
  148.     file.readOk:=TRUE;
  149.     RETURN i2m.LSB2MSBLong(data);
  150.   ELSE
  151.     file.readOk:=FALSE;
  152.     RETURN 0;
  153.   END;
  154. END GetLSBLong;
  155. (* \\\ ------------------------------------------------------------------------- *)
  156.  
  157. (* /// ------------------------ "PROCEDURE GetLSBSet()" ------------------------ *)
  158. PROCEDURE GetLSBLSet * (VAR file: ASFile): LONGSET;
  159.  
  160. VAR     data: LONGSET;
  161.  
  162. BEGIN
  163.   IF aio.ReadAsync(file.handle,data,SIZE(data))=SIZE(data) THEN
  164.     file.readOk:=TRUE;
  165.     RETURN i2m.LSB2MSBLSet(data);
  166.   ELSE
  167.     file.readOk:=FALSE;
  168.     RETURN LONGSET{};
  169.   END;
  170. END GetLSBLSet;
  171. (* \\\ ------------------------------------------------------------------------- *)
  172.  
  173. (* /// ----------------------- "PROCEDURE GetLSBShort()" ----------------------- *)
  174. PROCEDURE GetLSBShort * (VAR file: ASFile): INTEGER;
  175.  
  176. VAR     data: INTEGER;
  177.  
  178. BEGIN
  179.   IF aio.ReadAsync(file.handle,data,SIZE(data))=SIZE(data) THEN
  180.     file.readOk:=TRUE;
  181.     RETURN i2m.LSB2MSBShort(data);
  182.   ELSE
  183.     file.readOk:=FALSE;
  184.     RETURN 0;
  185.   END;
  186. END GetLSBShort;
  187. (* \\\ ------------------------------------------------------------------------- *)
  188.  
  189. (* /// ------------------------ "PROCEDURE UndoError()" ------------------------ *)
  190. PROCEDURE UndoError * (VAR file: ASFile);
  191. BEGIN
  192.   file.readOk:=TRUE;
  193. END UndoError;
  194. (* \\\ ------------------------------------------------------------------------- *)
  195.  
  196. END AsyncIOSupport2.
  197.